package com.study.util;

import com.study.constant.CommonKeys;

import java.io.Serializable;

/**
 * @author CSDN 流放深圳
 * @description 封装统一的返回信息
 * @create 2024-04-13 15:55
 * @since 1.0.0
 */
public class CallResult<T> implements Serializable {

    private static final long serialVersionUID = -5013706679353380036L;

    /**
     * 返回码
     */
    private int code;

    /**
     * 消息
     */
    private String message;

    /**
     * 数据
     */
    private T data;

    /**
     * 无参构造函数
     */
    public CallResult() {
    }

    /**
     * 全参构造函数
     *
     * @param code
     * @param message
     * @param data
     */
    public CallResult(int code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    /**
     * 调用成功，返回系统默认的消息体
     *
     * @return
     */
    public static CallResult success() {
        return new CallResult(CommonKeys.SUCCESS_CODE, CommonKeys.SUCCESS_MSG, "");
    }


    /**
     * 调用成功，返回数据
     *
     * @param data
     * @return
     */
    public static <T> CallResult success(T data) {
        return new CallResult(CommonKeys.SUCCESS_CODE, CommonKeys.SUCCESS_MSG, data);
    }

    /**
     * 调用成功，返回自定义消息、数据
     *
     * @param message
     * @param data
     * @return
     */
    public static <T> CallResult success(String message, T data) {
        return new CallResult(CommonKeys.SUCCESS_CODE, message, data);
    }

    /**
     * 调用成功，返回自定义 code、message、data
     *
     * @param code
     * @param message
     * @param data
     * @return
     */
    public static <T> CallResult success(int code, String message, T data) {
        return new CallResult(code, message, data);
    }

    /**
     * 调用失败，返回系统默认的消息体
     *
     * @return
     */
    public static CallResult error() {
        return new CallResult(CommonKeys.ERROR_CODE, CommonKeys.ERROR_MSG, "");
    }

    /**
     * 调用失败，返回自定义提示消息
     *
     * @param message
     * @return
     */
    public static CallResult error(String message) {
        return new CallResult(CommonKeys.ERROR_CODE, message, "");
    }

    /**
     * 调用失败，返回数据
     *
     * @param data
     * @return
     */
    public static <T> CallResult error(T data) {
        return new CallResult(CommonKeys.ERROR_CODE, CommonKeys.ERROR_MSG, data);
    }

    /**
     * 调用失败，返回自定义消息、数据
     *
     * @param message
     * @param data
     * @return
     */
    public static <T> CallResult error(String message, T data) {
        return new CallResult(CommonKeys.ERROR_CODE, message, data);
    }

    /**
     * 调用失败，返回自定义消息、数据
     *
     * @param code
     * @param message
     * @param data
     * @return
     */
    public static <T> CallResult error(int code, String message, T data) {
        return new CallResult(code, message, data);
    }

    /************************  以下是 get、set 方法  ***************************/
    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}
